package com.gitee.baqkft.code.core.docs;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.gitee.baqkft.code.core.util.FreemarkerUtils;
import com.gitee.baqkft.code.db.DBTable;

import freemarker.template.Configuration;
import freemarker.template.Template;

/**
 * 数据库文档处理器
 * @author chenmingcai
 * @date 2018年5月19日 下午5:26:28 
 *
 */

public class DBDocHandler
{
	protected final Logger logger = LoggerFactory.getLogger(getClass());
	
	/**
	 * 文档模板
	 */
	protected final String DOCS_TEMPLATE = "db/doc.md";
	
	/**
	 * 单例
	 */
	private static DBDocHandler handler;
	
	/**
	 * freeMarker配置
	 */
	private Configuration freemarkerConfig;
	
	private DBDocHandler()
	{
		freemarkerConfig = FreemarkerUtils.defaultConfiguration();
		freemarkerConfig.setClassLoaderForTemplateLoading(Thread.currentThread().getContextClassLoader(), "template");
	}

	/**
	 * 获取实例
	 * @return
	 */
	public static DBDocHandler getHandler()
	{
		if(handler == null)
		{
			handler = new DBDocHandler();
		}
		return handler;
	}
	
	/**
	 * 将数据表导出到文档
	 * @param tables	数据表
	 * @param path	导出路径
	 */
	public void exportDocs(List<DBTable> tables, String path)
	{
		File file = new File(path);
		try
		{
			FileOutputStream fos = new FileOutputStream(file);
			Template tmpl = FreemarkerUtils.loadTemplate(freemarkerConfig, DOCS_TEMPLATE);
			Map<Object, Object> model = new HashMap<>();
			model.put("tables", tables);
			FreemarkerUtils.process(model, tmpl, fos);
		}
		catch(IOException ex)
		{
			logger.error("模板处理失败", ex);
		}
	}
}
